﻿//2537. 统计好子数组的数目
//给你一个整数数组 nums 和一个整数 k ，请你返回 nums 中 好 子数组的数目。
//一个子数组 arr 如果有 至少 k 对下标(i, j) 满足 i < j 且 arr[i] == arr[j] ，那么称它是一个 好 子数组。
//子数组 是原数组中一段连续 非空 的元素序列。


class Solution {
public:
    long long countGood(vector<int>& nums, int k)
    {
        long long ans = 0;
        unordered_map<int, int> cnt;
        int pair = 0, left = 0, right = -1;
        for (right = 0; right < nums.size(); right++)
        {
            pair += cnt[nums[right]];
            cnt[nums[right]]++;
            while (pair >= k)
            {
                cnt[nums[left]]--;
                pair -= cnt[nums[left]];
                left++;
            }
            ans += left;
        }
        return ans;
    }
};